#include"BlockQueue.hpp"
#include<unistd.h>
using namespace bpModule;

//消费者
void* consumer(void* args)
{
    BlockQueue<int>* bp =static_cast<BlockQueue<int>* >(args);
    while(true)
    {
        sleep(2);
        //1.从bp拿到数据
        int data;
        bp->Pop(&data);
        //2.处理数据
        printf("Consumer, 消费了一个数据: %d\n", data);
    }


}

//生产者
void* producer(void* args)
{
    BlockQueue<int>* bp =static_cast<BlockQueue<int>* >(args);
    //1.获取数据
    int data =10;
    while(true)
    {
        sleep(1);
        //2.传输数据
        bp->Equeue(data);
        printf("producter 生产了一个数据: %d\n", data);
        data++;
    }
}


int main()
{
    BlockQueue<int>* bp =new BlockQueue<int>(5);

    pthread_t c1 ,c2 ,p1 ,p2 ,p3;
    pthread_create(&c1 ,nullptr ,consumer,bp);
    pthread_create(&c2 ,nullptr ,consumer,bp);

    pthread_create(&p1 ,nullptr ,producer,bp);
    pthread_create(&p2 ,nullptr ,producer,bp);
    pthread_create(&p3 ,nullptr ,producer,bp);



    pthread_join(c1,nullptr);
    pthread_join(c2,nullptr);

    pthread_join(p1,nullptr);
    pthread_join(p2,nullptr);
    pthread_join(p3,nullptr);

    delete bp;
    return 0;
}